export default class Pagination {
    constructor() {
        /**
         * 页码，从 1 开始
         * @type {number}
         */
        this.pageNum = 0;
        /**
         * 页面大小
         * @type {number}
         */
        this.pageSize = 0;
        /**
         * 总数
         * 正常情况下，这会是一个大于等于 0 的数字
         * @type {number}
         */
        this.total = 0;
        /**
         * 总页数
         * 正常情况下，这会是一个大于等于 1 的数值
         * @type {number}
         */
        this.pages = 0;
        /**
         * 当前页的数量
         * @type {number}
         */
        this.size = 0;
        /**
         * 起始行（前端未实现）
         * @type {number}
         */
        this.startRow = 0;
        /**
         * 末行（前端未实现）
         * @type {number}
         */
        this.endRow = 0;
    }


    /**
     * 设置分页大小
     *
     * @param pageNum {number} 每页显示数量
     */
    setPageNum(pageNum) {
        let n = Layers.caseToNumber(pageNum);
        Layers.state(n > 0, "page num below min value: " + n);
        this.pageNum = n;
    }

    /**
     * 前一页
     *
     * @type {number}
     */
    previousPage() {
        if (this.hasPreviousPage()) {
            this.pageNum--;
            return this.pageNum;
        }
    }

    /**
     * 下一页
     * @type {number}
     */
    nextPage() {
        if (this.hasNextPage()) {
            this.pageNum++;
            return this.pageNum;
        }
    }

    /**
     * 设置分页大小
     *
     * @param pageSize {number} 每页显示数量
     */
    setPageSize(pageSize) {
        let n = Layers.caseToNumber(pageSize);
        Layers.state(n > 0, "page size below min value: " + n);
        this.pageSize = n;
        if (Layers.isBlank(this.total) || this.total < 0) {
            this.total = 0;
        }
        this.pages = Math.ceil(this.total / this.pageSize);
    }

    /**
     * 重新设置总数
     *
     * @param total
     */
    setTotal(total) {
        let n = total;
        Layers.state(n >= 0, "page total below min value: " + n);
        this.total = Layers.caseToNumber(total);
        n = this.pageSize;
        Layers.state(n > 0, "page size below min value: " + n);
        this.pages = Math.ceil(total / this.pageSize);
    }

    /**
     * 是否为第一页
     * @type {boolean}
     */
    isFirstPage() {
        return this.pageNum <= 1;
    };

    /**
     * 是否为最后一页
     * @type {boolean}
     */
    isLastPage() {
        return this.pageNum === this.pages;
    }

    /**
     * 是否有前一页
     * @type {boolean}
     */
    hasPreviousPage() {
        return this.pageNum > 1;
    }

    /**
     * 是否有下一页
     * @type {boolean}
     */
    hasNextPage() {
        return this.pageNum < this.pages;
    }
}